package com.huikeportal.service;

import java.text.ParseException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import com.huikeportal.model.AllIndexModel;
import com.huikeportal.model.RankingData;
import com.huikeportal.model.ReportGraphData;
import com.huikeportal.model.ReportSiteDay;
import com.huikeportal.model.SiteAllInfo;
import com.huikeportal.model.UserInfo;
import com.huikeportal.model.UserSiteHistory;
import com.huikeportal.model.WordBook;


/** 
 * 2015-9-7 
 * 客流统计-全局分析-service
 * author:wenyp 
 */
public interface FootfallGlobalService {
	
	/**
	 * 查询图表数据
	 * @param map
	 * @return List<ReportGraphData>
	 * @throws ParseException
	 */
	public List<ReportGraphData> getGraphData(HashMap<String, Object> map)  throws Exception;
	
	/**
	 * 前台获取图表数据 
	 * @param list
	 * @param timeType_table
	 * @return
	 * @throws Exception
	 */
	public StringBuffer getGlobalTable(List<ReportGraphData> list,String timeType_table,UserInfo userInfo,String siteId) throws Exception;
	
	/**
	 * 前台获取图表数据 
	 * @param list
	 * @param timeType_table
	 * @return
	 * @throws Exception
	 */
	public StringBuffer getGlobalTable1(List<ReportGraphData> list,String timeType_table,UserInfo userInfo,String siteId) throws Exception;
	
	public List<ReportSiteDay> selectTableByCondition(HashMap<String, Object> map)  throws Exception;
	
	/**
	 * @author wyp
	 * 根据登录信息查询场所信息
	 */
	
	public SiteAllInfo selectSiteByUserId(UserInfo userInfo,String siteType) throws Exception;
	
	/**
	 * 
	 * 根据日周年月，场所，字段获取排行榜数据
	 * @param HashMap<String, Object>
	 * @return List<RankingData>
	 * @author wenyp
	 */
	public List<RankingData> selectRankingByCondition(HashMap<String, Object> Map) throws Exception;
	
	
	public List<HashMap<String,Object>> getfootPaiHang(HashMap<String, Object> map)throws Exception;
	/**
	 * 查询排行榜数据
	 * @param map
	 * @return List<ReportGraphData>
	 * @throws ParseException
	 */
	public List<HashMap<String,Object>> getRanking(HashMap<String, Object> Map) throws Exception;
	
	/**
	 * @author
	 * @return void 
	 * @param UserSiteHistory
	 * 修改记录-用户访问记录siteId
	 * 
	 */
	public void updateUserSiteHistory(UserSiteHistory userSiteHistory)  throws Exception;
	
	
	public UserSiteHistory selectUserSiteHistory(UserSiteHistory userSiteHistory);
	
	/** 
     * 根据开始时间和结束时间返回时间段内的日期时间集合 
     *  
     * @param beginDate 
     * @param endDate 
     * @return List 
     */ 
    public  List<String> getDatesBetweenTwoDate(String begin, String end);
    
    /**
	 * 根据type获取指标计算公式
	 * @param int
	 * @return HashMap
	 * 
	 */
    public HashMap<String,Object> getCalret(int type);
    
	/**
	 * 根据开始和结束年份和周，算出之间的周list
	 * @param beginYear
	 * @param beginWeek
	 * @param endYear
	 * @param endWeek
	 * @return List<String>
	 */
    public  List<String> getWeeksBetweenTwoWeek(String beginYear,String beginWeek,String endYear, String endWeek);
    
    /**
	 * 判断用户权限下面的场所是不是集团所有的场所
	 * @param siteId
	 * @param userInfo
	 * @return
	 * @throws Exception
	 */
	public HashMap<String, Object> judgeParentIsAll(String siteId,UserInfo userInfo) throws Exception;

	/**
	 * true 集团下面的所有广场=户权限下面的所有广场；false 集团下面的所有广场!=户权限下面的所有广场
	 * @param siteId
	 * @param userInfo
	 * @return
	 * @throws Exception
	 */
	public boolean getJudgeAll(String siteId,UserInfo userInfo) throws Exception;
	
	/**
	 * 查询场所关系表获取上级集团的siteid
	 * @param sitekey
	 * @return
	 */
	public String selectSiteRelationByChildId(String sitekey);
	
	/**
	 * 根据siteId获取sitename
	 * @param sitekey
	 * @return
	 */
	public String getSiteName(String sitekey);
	
	/**
	 * 根据用户查询用户有权限的指标
	 * @param UserInfo
	 * @return
	 */
	public List<String> getUserIndex(UserInfo UserInfo);
	
	
	/**
	   * 在给定的元素中搜索指定的元素,返回符合条件的元素数组.对于不同级别的同名元素限制作用,即可以
	   * 搜索元素A中的子元素C.而对于元素B中子元素C则过虑,通过多级限定可以准确定位.
	   * @param parentElementString String
	   * @param tagName String
	   * @return String[]
	   */
	public  ArrayList<String[]> changeTableToList(String str);
	
	public String getSiteNames(String siteID);
	/**
	 * 根据场所type类型获取指标权限
	 * @param siteType
	 * @return
	 
	public List<String> getIndexPower(List<String> siteTypes);*/
	
	/**
	 * 
	 * @param userIndex 用戶指標權限
	 * @param moduleId 菜單id
	 * @param siteType 場所類型
	 * @return 指标
	 */
	public  List<String> getIndexListOfModel(List<String> userIndex, String moduleId,
			List<String> siteType);
	
	
	/**
	 * 根据时间类型获取指标权限
	 * @param timeType_table 时间类型
	 * @return 指标
	 */
	public List<String> getTimeIndex(String timeType_table);
	/**
	 * 根据siteid查询type
	 * @param siteId
	 * @return
	 */
	public List<String> getSiteTypes(String siteIds);
	
	/**
	 * 导航栏日期
	 * @return
	 * @throws Exception
	 */
	public String getDate() throws Exception;

	public HashMap<String, Object> getparam(String timeType_table,String timeType,String from,String to) throws ParseException;
	
	/**
	 * 数字千分位
	 * @param text
	 * @return
	 */
	public  String fmtMicrometer(String text) ;
	/**
	 * 中文星期
	 * @param weekInt
	 * @return
	 */
	public String getChinaWeek(int weekInt);
	
	/**
	 * 获取指标的中文名称
	 * @param orderFieldNum 指标代码
	 * @return
	 */
	public String getOrderFieldName(String orderFieldNum);
	/**
	 * 获取指标英文名称
	 * @param orderFieldNum  指标代码
	 * @return
	 */
	public String getOrderField(String orderFieldNum);
	
	/**
	 * @author wyp
	 * @param model
	 * @param index
	 * @return获取指标属性
	 * @throws IllegalArgumentException
	 * @throws IllegalAccessException
	 */
	public String getIndexData(Object model,String index) throws IllegalArgumentException, IllegalAccessException;
	
	/**
	 * 求两个集合的交集
	 * @param menuIndexList
	 * @param userIndex
	 * @return
	 */
	public List<String> getListJiaoji(List<String> menuIndexList,List<String> userIndex);
	
	/**
	 * 根据场所类型获取场所名称
	 * @param type 场所类型
	 * @return
	 */
	public String getSiteTypeName(Integer type);
	/**
	 * 将指标分组为视频指标，wifi指标，会员，旅游局，销售等等
	 * @param indexList 指标列表
	 * @return key指标类型，value指标名称
	 */
	public HashMap<String, List<String>> getIndexListOfGroup(List<String> indexList);
	
	/**查询指标组别*/
	public HashMap<String, String> getIndexGroupInfo();
	/**查询指标*/
	public HashMap<String, String> getIndexInfo();
	/**
	 * 获取上级场所列表
	 * @param siteList
	 * @param siteID
	 * @return
	 */
	public List<String> getHighSiteId(List<String> siteList,String siteID);
	
	/**
	 * 获取起始月和结束月之间的月数
	 * @param beginYear
	 * @param beginMonth
	 * @param endYear
	 * @param endMonth
	 * @return
	 */
    public  List<String> getMonthsBetweenTwoMonth(String beginYear,String beginMonth,String endYear, String endMonth);
    
    /**
     * 获取指标顺序
     * @return
     */
    public HashMap<String ,  List<String>> getIndexOrder();
    
    /**
     * 获取今日指标
     * @param todayIndexes
     * @return
     */
    public String getTodayTargetStr(HashMap<String, Object> todayIndexes);
    
    
    /**
     * 根据siteId获取场所信息
     * @param sitekey
     * @return
     */
	public String getSiteAllInfoById(String sitekey);
	
	/**
	 * 根据广场siteId获取集团siteId
	 * @param siteID
	 * @return
	 */
	public String getJituanIdByguangchangId(String siteID);
	
	/**
	 * 对比分析表格
	 * @param list
	 * @param timeType_table
	 * @param type
	 * @return
	 * @throws Exception
	 */
	public StringBuffer getGlobalTable(List<HashMap<String, Object>> list,String timeType_table,String type) throws Exception ;
	
	/**
	 * 获取场所指标的历史最大值
	 * @param paraMap
	 * @return
	 */
	public ReportGraphData getSiteMaxDataOfIndex(HashMap<String , Object> paraMap);
	
	/**
	 * 根据siteId获取siteInfo
	 * @param sitekey
	 * @return
	 */
	public SiteAllInfo getSiteAllInfo(String sitekey);
}
